import axios from 'axios';
import store from '@/store/index';
import {Loading, Message} from 'element-ui';
// import Cookies from 'js-cookie'

const service = axios.create({
  timeout: 10*1000
});

// 响应超时时间10s
service.defaults.timeout = 10 * 1000;

// 配置cookie
service.defaults.withCredentials = true;

//service.defaults.headers.common['Cookie'] = ""

// 配置post请求头
service.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';

// 静态资源
// Vue.prototype.$static = '';

//配置语言
// var lang=Cookies.get('language') || 'zh';
// service.defaults.headers["Accept-Language"]=lang=='en'?'en-US':'zh-CN';

// 配置接口地址base.Url
if(location.hostname === 'test.demin.com'){
  // 测试环境
  service.defaults.baseURL = process.env.TEST_API_ROOT;
}else if(location.hostname === 'product.demin.com'){
  // 生产环境
  service.defaults.baseURL = process.env.PROD_API_ROOT;
}else{
  // 开发环境
  service.defaults.baseURL = process.env.DEV_API_ROOT;
}

var loadingInstance;
// POST传参序列化(添加请求拦截器)
export const myInterceptor = service.interceptors.request.use(
  config => {
    loadingInstance = Loading.service({
      lock: true,
      text: '加载中，请稍后...',
      spinner: 'el-icon-loading',
      background: 'rgba(0, 0, 0, 0.7)'
    });
   
    //为get请求添加一个随机数字段
    if(config.method === 'get') {
      config.params = {
        _t: Date.parse(new Date())/1000,
        ...config.params
      }
    }

    // 一般在这个位置判断token是否存在
    // 每次跳页面, 都要获取新路由对应的html页面, 这时候可以用axios的http拦截
    // 每次路由跳转, 都先让后台验证一下token是否有效, 在http头添加token,
    //   当后端接口返回 401 Unauthorized（未授权） ，让用户重新登录。
    if (store.state.token) {  // 判断是否存在token，如果存在的话，则每个http header都加上token
      config.headers.Authorization = `token ${store.state.token}`;
    }

    return config;
  },
  err => {
    loadingInstance.close();
    Message.error('请求错误');
    return Promise.reject(err);
  }
);
// 返回状态判断(添加响应拦截器)
service.interceptors.response.use(
  res => {
    // console.log(res);
    if (res.status === 200 || res.status === 403) {
      loadingInstance.close();
      if (res.data.status == '100') { //不是接口本身的错误
        loadingInstance.close();
        Message.error(`错误：${res.data.msg}`);
      } else {
        return res;
      }
    } else {
      loadingInstance.close();
      Message.error(res.data.msg);
    }
  },
  err => {
    loadingInstance.close();
    if(!err.response){
      //可能是登录信息失效  -- 打包的时候不能注释
      if (process.env.NODE_ENV == 'development') {
        if (err.message.indexOf('timeout') != -1) {  //接口超时
          Message.error('网络超时');
        }
      } else if (err.message.indexOf('timeout') != -1) {  //接口超时
        Message.error('网络超时');
      }else{
        window.location.href = service.defaults.baseURL
      }
    } else if(err.response.status != 403 && err.response.status != 401) {
      Message.error('请求失败，请稍后再试');
    } else if(err.response) {
      console.error("error:"+err.response.status);
      switch (err.response.status) {
        case 401:
          router.replace({
            path: 'login',
            query: {redirect: router.currentRoute.fullPath}
          })
      }
    }
    return Promise.reject(err);
  }
);

// // post请求
// export function post(url, params) {
//   return new Promise((resolve, reject) => {
//     service.post(url, params)
//       .then(
//         res => {
//           resolve(res.data);
//         },
//         err => {
//           reject(err.data);
//         }
//       )
//       .catch(err => {
//         reject(err.data);
//       });
//   });
// }

// // get请求
// export function get(url, params) {
//   return new Promise((resolve, reject) => {
//     service.get(url,
//       {
//         params: params,
//         paramsSerializer: params => {
//           return qs.stringify(params, { indices: false })
//         }
//       })
//       .then(res => {
//         resolve(res.data);
//       })
//       .catch(err => {
//         reject(err.data);
//       });
//   });
// }

export default service
